/**
 * 
 * nextTick setImmediate区别和联系
 * nextTick 把回调函数放在当前执行栈的底部
 * setImmediate 把回调函数放在事件队列的尾部 不太重要的任务放到setImmediate
 * 重要的任务放到nextTick中
 * 
 */

/**
 * 
 * Event
 * node是基于事件驱动
 */

let eventEmitter = require("./events.js") //事件发射器
let util = require('util');

// 这是一个类
function Bell(){
    eventEmitter.call(this)  //继承私有属性
}

// 进行原型继承的 Object.setPrototypeOf(ctor.prototype, superCtor.prototype)  ctor.prototype.__proto__ = superCtor.prototype
util.inherits(Bell, eventEmitter)
let bell = new Bell()

//学生要进教室
function studentInClassroom(roomNumber){
    console.log(`学生进${roomNumber}教室`)
}
function teacherInClassroom(roomNumber){
    console.log(`讲师进${roomNumber}教室`)
}
function masterInClassroom(roomNumber){
    console.log(`校长进${roomNumber}教室`)
}

bell.on("bibi", studentInClassroom)
bell.on("bibi", teacherInClassroom)
bell.once('bibi', masterInClassroom)
bell.emit('bibi', '301')
